package com.yssoft.service.core;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.google.common.collect.Lists;
import com.yssoft.entity.core.TProcessingTechnology;
import com.yssoft.entity.core.TProductImg;
import com.yssoft.entity.core.TProducts;
import com.yssoft.mapper.core.TProcessingTechnologyMapper;
import com.yssoft.mapper.core.TProductClassifyMapper;
import com.yssoft.mapper.core.TProductImgMapper;
import com.yssoft.mapper.core.TProductsMapper;
import com.yssoft.mapper.core.TTechnicIndexMapper;
import com.yssoft.shiro.MyRealm.ShiroUser;
import com.yssoft.utils.LayuiUtil;
import com.yssoft.utils.UserHelper;
import com.yssoft.vo.TProductClassifyVo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * @类名称: ProductsService
 * @类描述: 产品server
 * @作者: 洪丰
 * @创建时间:2018年4月27日 上午9:48:25
 */
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
@Service
public class ProductsService
{
	@Autowired
	protected TProductsMapper productsMapper;
	@Autowired
	protected TProductClassifyMapper productClassifyMapper;
	@Autowired
	protected TProductImgMapper productImgMapper;
	@Autowired
	private TTechnicIndexMapper tTechnicIndexMapper;
	@Autowired
	private TProcessingTechnologyMapper tProcessingTechnologyMapper;
	
	/**
	 * @方法名称: queryProductById
	 * @功能描述: 获取唯一产品数据
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 上午9:34:46
	 * @param id
	 * @return TProducts
	 */
	public TProducts queryProductById(Integer id){
		return productsMapper.selectByPrimaryKey(id);
	}
	
	/**
	 * @方法名称: queryProductPage
	 * @功能描述: 分页查询列表数据
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 上午9:41:03
	 * @param pageNumber
	 * @param pageSize
	 * @param productName
	 * @return JSONObject
	 */
	public JSONObject queryProductPage(int pageNumber, int pageSize, String productName) {
        //获取当前登陆账号信息
        Integer entId =UserHelper.getCurrentCompanyId();//企业id
        PageHelper.startPage(pageNumber,pageSize);//下面第一个查询结果进行分页
        HashMap<String,Object> param = new HashMap<>();
        param.put("entId",entId);
        if(!"".equals(productName)){
        	param.put("productName",productName);
        }
        List<Map<String,Object>> proList = productsMapper.selectProPage(param);
		int count = productsMapper.selectProPageCount(param);
        JSONObject jsonObject =LayuiUtil.getJSONObjectByMap(proList,count,"","");
        return jsonObject;
    }
	
	/**
	 * @方法名称: addAcc
	 * @功能描述: 新增产品
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 上午9:47:47
	 * @param entity void
	 */
	public void addAcc(TProducts entity, String imgId, String tImgId) {
		
		// 取得当前登录人
		ShiroUser user = UserHelper.getCurrentUser();
		entity.setCreatorId(user.getId());
		entity.setCreatorName(user.getPersonName());
		entity.setCreateTime(new Date());
		entity.setDeleteFlag("0");
		entity.settEId(user.getEntId());
		
		productsMapper.insert(entity);
		if(!"".equals(imgId)){
			String[] imgIdArr = imgId.split(",");
			String[] tImgIdArr = tImgId.split(",");
			for(int i = 0; i < imgIdArr.length; i++){
				TProductImg imgEntity = new TProductImg();
				imgEntity.setCreateTime(new Date());
				imgEntity.setDeleteFlag(0);
				
				imgEntity.setPictureImg(imgIdArr[i]);
				imgEntity.setPictureImgT(tImgIdArr[i]);
				imgEntity.settPId(entity.getId());
				productImgMapper.insert(imgEntity);
			}
		}
	}
	
	/**
	 * @方法名称: editAcc
	 * @功能描述: 修改产品
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 上午9:49:44
	 * @param entity void
	 */
	public void editAcc(TProducts entity, String imgId, String tImgId) {
		productsMapper.updateByPrimaryKeySelective(entity);
		if(!"".equals(imgId)){
			String[] imgIdArr = imgId.split(",");
			String[] tImgIdArr = tImgId.split(",");
			for(int i = 0; i < imgIdArr.length; i++){
				TProductImg imgEntity = new TProductImg();
				imgEntity.setCreateTime(new Date());
				imgEntity.setDeleteFlag(0);
				
				imgEntity.setPictureImg(imgIdArr[i]);
				imgEntity.setPictureImgT(tImgIdArr[i]);
				imgEntity.settPId(entity.getId());
				productImgMapper.insert(imgEntity);
			}
		}
	}
	
	/**
	 * @方法名称: delAccById
	 * @功能描述: 逻辑删除产品
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 上午9:50:06
	 * @param id
	 * @return int
	 */
	public int delAccById(Integer id) {
		TProducts entity = new TProducts();
		entity.setId(id);
		entity.setDeleteFlag("1");
		return productsMapper.updateByPrimaryKeySelective(entity);
	}
	
	/**
	 * @方法名称: findPCAndChildrenList
	 * @功能描述: 获取产品类别及其子类别
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 下午1:35:28
	 * @return List<TProductClassifyOther>
	 */
	public List<TProductClassifyVo> findPCAndChildrenList() {
		return productClassifyMapper.selectPCaAndChildrenList();
	}
	
	/**
	 * @方法名称: findProductImgList
	 * @功能描述: 通过产品ID获取产品图片
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 下午6:25:13
	 * @param ProductId
	 * @return List<TProductImg>
	 */
	public List<TProductImg> findProductImgList(int ProductId) {
		TProductImg record = new TProductImg();
		record.settPId(ProductId);
		return productImgMapper.select(record);
	}
	
	/**
	 * @方法名称: delImgById
	 * @功能描述: 删除图片
	 * @作者: 洪丰
	 * @创建时间: 2018年4月27日 下午6:42:07
	 * @param id
	 * @return int
	 */
	public int delImgById(Integer id) {
		return productImgMapper.deleteByPrimaryKey(id);
	}
	
	/**
	 * @方法名称: queryProductsByRecord
	 * @功能描述: 通过record查询产品
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 上午11:32:27
	 * @param record
	 * @return int
	 */
	public int queryProductsByRecord(TProducts record){
		record.setDeleteFlag("0");
		List<TProducts> roleLsit = productsMapper.select(record);
		return roleLsit.size();
	}
	
	/**
	 * @方法名称: querySermigoodByProId
	 * @功能描述: 获取产品的半成品信息
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午5:18:46
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> querySermigoodByProId(Integer ProId){
		List<Map<String, Object>> sermigoodList = productsMapper.selectSermigoodByProId(ProId);
		return sermigoodList;
	}
	
	/**
	 * @方法名称: queryOtherSermigoodByProId
	 * @功能描述: 获取不属于该产品的半成品信息
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午5:19:48
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> queryOtherSermigoodByProId(Integer proId){
		HashMap<String, Object> paramMap =  new HashMap<String, Object>();
		paramMap.put("proId", proId);
		paramMap.put("entId", UserHelper.getCurrentCompanyId());
		List<Map<String, Object>> sermigoodList = productsMapper.selectOtherSermigoodByProId(paramMap);
		return sermigoodList;
	}
	
	/**
	 * @方法名称: queryMaterialByProId
	 * @功能描述: 获取产品的物料信息
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午5:27:33
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> queryMaterialByProId(Integer ProId){
		List<Map<String, Object>> sermigoodList = productsMapper.selectMaterialByProId(ProId);
		return sermigoodList;
	}
	
	/**
	 * @方法名称: queryOtherMaterialByProId
	 * @功能描述: 获取不属于该产品的物料信息
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午5:27:56
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> queryOtherMaterialByProId(Integer proId){
		HashMap<String, Object> paramMap =  new HashMap<String, Object>();
		paramMap.put("proId", proId);
		paramMap.put("entId", UserHelper.getCurrentCompanyId());
		List<Map<String, Object>> sermigoodList = productsMapper.selectOtherMaterialByProId(paramMap);
		return sermigoodList;
	}
	
	/**
	 * @方法名称: updateProductSermigoodFun
	 * @功能描述: 插入产品关联的半成品
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午7:19:01
	 * @param segoodIds
	 * @param prodId void
	 */
	public void insertProductSermigoodFun(String segoodIds, int prodId) {
		if(null != segoodIds && !"".equals(segoodIds)){
			String [] segoodIdArray = segoodIds.split(",");
			List<Map<String, Object>> ids = Lists.newArrayList();
			for(String segoodId : segoodIdArray){
				Map<String, Object> idMap = new HashMap<String, Object>();
				idMap.put("prodId", prodId);
				idMap.put("segoodId", Integer.parseInt(segoodId));
				ids.add(idMap);
			}
			productsMapper.insertProductSermigood(ids);
		}
	}
	
	/**
	 * @方法名称: deleteProductSermigoodFun
	 * @功能描述: 删除产品关联的半成品
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午8:34:02
	 * @param segoodIds
	 * @param prodId void
	 */
	public void deleteProductSermigoodFun(String segoodIds, int prodId) {
		if(null != segoodIds && !"".equals(segoodIds)){
			String [] segoodIdArray = segoodIds.split(",");
			List<Map<String, Object>> ids = Lists.newArrayList();
			for(String segoodId : segoodIdArray){
				Map<String, Object> idMap = new HashMap<String, Object>();
				idMap.put("prodId", prodId);
				idMap.put("segoodId", Integer.parseInt(segoodId));
				ids.add(idMap);
			}
			productsMapper.deleteProductSermigood(ids);
		}
	}
	
	/**
	 * @方法名称: insertProductMaterialFun
	 * @功能描述: 插入产品关联物料
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午7:21:07
	 * @param materialIds
	 * @param prodId void
	 */
	public void insertProductMaterialFun(String materialIds, int prodId, String packageNums) {
		if(null != materialIds && !"".equals(materialIds)){
			String [] materialArray = materialIds.split(",");
			String [] packageNumArray = packageNums.split(",", -1);
			List<Map<String, Object>> ids = Lists.newArrayList();
			int i = 0;
			for(String materialId : materialArray){
				Map<String, Object> idMap = new HashMap<String, Object>();
				idMap.put("prodId", prodId);
				idMap.put("materialId", Integer.parseInt(materialId));
				if(!"".equals(packageNumArray[i])){
					idMap.put("packageNum", packageNumArray[i]);
				}else{
					idMap.put("packageNum", null);
				}
				ids.add(idMap);
				i++;
			}
			productsMapper.insertProductMaterial(ids);
		}
	}
	
	/**
	 * @方法名称: deleteProductMaterialFun
	 * @功能描述: 删除产品关联物料
	 * @作者: 洪丰
	 * @创建时间: 2018年4月28日 下午8:34:25
	 * @param materialIds
	 * @param prodId void
	 */
	public void deleteProductMaterialFun(String materialIds, int prodId) {
		if(null != materialIds && !"".equals(materialIds)){
			String [] materialArray = materialIds.split(",");
			List<Map<String, Object>> ids = Lists.newArrayList();
			for(String materialId : materialArray){
				Map<String, Object> idMap = new HashMap<String, Object>();
				idMap.put("prodId", prodId);
				idMap.put("materialId", Integer.parseInt(materialId));
				ids.add(idMap);
			}
			productsMapper.deleteProductMaterial(ids);
		}
	}
	/**
	 * @方法名称: queryProcessByProId
	 * @功能描述: 获取产品的工艺信息
	 * @作者: 王永宁
	 * @创建时间: 2018年5月24日 上午9:46:46
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> queryProcessByProId(Integer ProId){
		
		List<Map<String, Object>> processList = productsMapper.queryProcessByProId(ProId);
		return processList;
	}
	
	/**
	 * @方法名称: queryOtherProcessByProId
	 * @功能描述: 获取不属于该产品的工艺信息
	 * @作者: 王永宁
	 * @创建时间: 2018年5月24日 上午9:47:48
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> queryOtherProcessByProId(Integer proId){
		Integer companyId = UserHelper.getCurrentCompanyId();
		HashMap<String, Object> paramMap =  new HashMap<String, Object>();
		paramMap.put("proId", proId);
		paramMap.put("companyId", companyId);
		List<Map<String, Object>> processList = productsMapper.queryOtherProcessByProId(paramMap);
		return processList;
	}
	/**
	 * @方法名称: updateProductProcess
	 * @功能描述: 插入产品关联的工艺
	 * @作者: 王永宁
	 * @创建时间: 2018年5月24日 上午11:04:01
	 * @param segoodIds
	 * @param prodId void
	 */
	public void updateProductProcess(String segoodIds, int prodId) {
		if(null != segoodIds && !"".equals(segoodIds)){
			String [] segoodIdArray = segoodIds.split(",");
			List<Map<String, Object>> ids = Lists.newArrayList();
			for(String segoodId : segoodIdArray){
				Map<String, Object> idMap = new HashMap<String, Object>();
				SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String time=sdf.format(new Date());
				idMap.put("time", time);
				idMap.put("prodId", prodId);
				idMap.put("segoodId", Integer.parseInt(segoodId));
				ids.add(idMap);
			}
			productsMapper.updateProductProcess(ids);
		}
	}
	
	/**
	 * @方法名称: deleteProductProcess
	 * @功能描述: 删除产品关联的工艺
	 * @作者: 王永宁
	 * @创建时间: 2018年5月24日 上午11:05:02
	 * @param segoodIds
	 * @param prodId void
	 */
	public void deleteProductProcess(String segoodIds, int prodId) {
		if(null != segoodIds && !"".equals(segoodIds)){
			String [] segoodIdArray = segoodIds.split(",");
			List<Map<String, Object>> ids = Lists.newArrayList();
			for(String segoodId : segoodIdArray){
				Map<String, Object> idMap = new HashMap<String, Object>();
				idMap.put("prodId", prodId);
				idMap.put("segoodId", Integer.parseInt(segoodId));
				ids.add(idMap);
			}
			productsMapper.deleteProductProcess(ids);
		}
	}
	/**
	 * @方法名称: queryProcessAndViewByProId
	 * @功能描述: 获取产品的工艺详情
	 * @作者: 王永宁
	 * @创建时间: 2018年5月24日 下午1:22:46
	 * @param ProId
	 * @return List<Map<String,Object>>
	 */
	public List<Map<String, Object>> queryProcessAndViewByProId(Integer ProId,Integer wordId){
		List<Map<String, Object>> processList = productsMapper.queryProcessByProId(ProId);
		for (Map<String, Object> map : processList) {
			Map<String, Object> param = new HashMap<>();
			/*查询工艺管理信息*/
			TProcessingTechnology tProcessingTechnology = new TProcessingTechnology();
			tProcessingTechnology.setId((Integer)map.get("id"));
			tProcessingTechnology.setDeleteFlag("0");
			tProcessingTechnology.settEId(UserHelper.getCurrentCompanyId());
			/*查询工艺指标*/
			param.put("tPId", map.get("id"));
			param.put("deleteFlag", "0");
			param.put("tEId", UserHelper.getCurrentCompanyId());
			param.put("workId", wordId);
			List<Map<String,Object>> technicIndexList = tTechnicIndexMapper.queryTechnicIndexList(param);
			map.put("view", technicIndexList);
		}
		return processList;
	}

	/**
	 * @方法名称: saveSort
	 * @功能描述: 产品工艺管理排序
	 * @作者: 王永宁
	 * @创建时间: 2018年5月24日 下午3:10:46
	 */
	public void saveSort(String sort, String pId, String tId) {
		Map<String, Object> param = new HashMap<>();
		param.put("sort", sort);
		param.put("pId", pId);
		param.put("tId", tId);
		productsMapper.saveSort(param);
		
	}
}
